perm filename CRE.FAI[C,BGB] blob sn#101490 filedate 1974-05-15 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00023 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00003 00002	CRE3 -  CART'S EYE  -  CONTOUR,REGION,EDGE  -  BGB  -  APRIL 1973.
C00005 00003	INITIALIZATION - SA: AND REE:
C00007 00004	SUBR(TTY)	TTY LISTEN.
C00008 00005	  ---		COMMAND JUMP TABLE ASCII 00 TO 37.
C00009 00006	  ---		COMMAND JUMP TABLE ASCII 40 TO 77.
C00010 00007	  ---		COMMAND JUMP TABLE ASCII 100 TO 137.
C00012 00008	XWINDO:		WINDOW SCROLLING COMMANDS.
C00014 00009	XLINK:		LINK FOLLOWING COMMANDS.
C00016 00010	XRESET "Z" COMMAND.	 NEXIMG.
C00018 00011	SUBR(XMATCH)		"M" - MATCH AND LINK IMAGES IN TIME.
C00020 00012	SUBR(XNAME)		"N" - NAME THE FILM.
C00021 00013	XFLAGS:
C00023 00014	SUBR(XCUT).		MAKE CUTS COMMAND "C".
C00025 00015	SUBR(XATP1).	AUTOMATIC TURN TABLE PERCEPTION "A".
C00027 00016	SUBR(XATP2).	AUTOMATIC TURN TABLE PERCEPTION "εA".
C00029 00017	SUBR(XCUTS).		MAKE CUTS COMMAND "Q".
C00030 00018	SUBR(XTAKE).		"T" TAKE TELEVISION PICTURE.
C00031 00019	SUBR(XSELECT).		"S" SELECT CAMERA.
C00033 00020	SUBR(XXPAND)		HISTOGRAM CUT HIGH AND CUT LOW.
C00035 00021	SUBR(REMAP)		RE MAP TVBUF.
C00036 00022	AWIDTH - SELECT ARC WIDTH.
C00038 00023	XHELP:	CALL(TVHELP,[[SIXBIT/CRE/↔SIXBIT/HLP/↔0↔SIXBIT/GEM HE/]])
C00041 ENDMK
C⊗;
;CRE3 -  CART'S EYE  -  CONTOUR,REGION,EDGE  -  BGB  -  APRIL 1973.
TITLE CRE

	EXTERN QBLK,SX,SY,DEL,MAG
	EXTERN DPYBLK,DPYIMG,DPYHIS,CROP
	EXTERN MKCON
	EXTERN TVXGP,PLOTO,MORCOR
	EXTERN QIMAGE,QNODE

	INTERN FLGBGB,FLGDD,FLGIII
	INTERN CTRL,META,CHR
	INTERN ARCWID

;CONTROL FLAGS.
	INTERN FLGHIS
	FLGHIS:0		;HISTOGRAM IS VALID.
	VCUT↑:-14		;VECTOR DISPLAY CONTRAST THRESHOLD.
	PCUT↑:-14		;VECTOR COUNT.
	FLGBGB:0		;RUNNING UNDER A BGB PPPN.
	FLGDD:0			;RUNNING AT A DATA DISC.
	FLGIII:0		;RUNNING AT A III DISPLAY.

;ARC WIDTH PROPORTIONAL TO CONTRAST TABLE FOR MKARCS.
ARCWID:
	FOR I←0,3{1.0↔}
	FOR I←4,5{0.9↔}
	FOR I←6,12{0.8↔}
	FOR I←13,17{0.7↔}
	FOR I←20,37{0.6↔}
	FOR I←40,77{0.5↔}
	0

;TELETYPE COMMAND STATE.
	DECLARE{CTRL,META,MTCT,CHR}
;INITIALIZATION - SA: AND REE:
;----------------------------------------------------------------
	PDL: BLOCK 100

;START ADDRESS
SA:	LAC 17,[IOWD 100,PDL]
	CALL(MORCOR)
	CALL(SEGTV)
;RE-ENTRY ADDRESS.
REE:	LACI .↔DAC 124↔CALLI
	LAC 17,[IOWD 100,PDL]
	SETO↔GETLIN	;GET LINE CHARACTERISTICS.
	CAMN[-1]↔SETZ	;JOB DETACHED.
	DZM FLGIII↔TLNE(1B0)↔SETOM FLGIII
	DZM FLGDD↔ TLNE(1B4)↔SETOM FLGDD
	PPIOT 2,-=250
	PPIOT 3,3003
	DZM QBLK
	MOVEI 20↔CRLF↔SOJG .-1
	SETZ↔GETPPN↔CDR
	CAIN'BGB'↔SETOM FLGBGB
	LAC 17,[IOWD 100,PDL]
	CALL(CROP)
	CALL(DPYIMG)
	PUSHJ TTY
	EXIT
;6/12/72----------------------------------------------------------
;TELETYPE COMMAND STATE.

;SEGTV - GET OLD TVSEG.
SUBR(SEGTV)-------------------------------------------------------
	EXTERN HI
;MAKE A NEW TVSEG.
	LACI HI↔CORE2↔GO[FATAL(CAN'T GET A SECOND SEGMENT.)]
	LAC[SIXBIT/*CRE3*/]↔SETNM2↔JFCL
	SETZ↔SEGNUM↔DAC TVSEG
	LAC[%+1(%)]↔DZM %↔BLT HI-1
	POP0J
TVSEG:0
;16/12/72---------------------------------------------------------
SUBR(TTY)	;TTY LISTEN.
BEGIN TTY;--------------------------------------------------------
L0:	CRLF
L1:	OUTCHR["*"]
L2:	INCHRW
	DZM CTRL↔TRZE 200↔SETOM CTRL
	DZM META↔TRZE 400↔SETOM META
	CAIN 0,15↔GO L1+1	;CARRIAGE RETURN.
	CAIN 0,12↔GO L1		;LINE FEED.
	CAIL 140↔SUBI 40	;SUPPRESS LOWER CASE.
	DAC CHR
	LAC CTRL↔AND META↔DAC MTCT↔LAC CHR
	LAC 1,CHR
	PUSHJ P,@A00(1)
	GO L0			;CRLF-STAR.
	GO L2			;NOTHING.
	GO L1			;STAR.
BEND TTY; BGB 19 APRIL 1973 --------------------------------------
;  ---		COMMAND JUMP TABLE ASCII 00 TO 37.
A00:	NOP	;null
	NOP	;"↓"
	NOP	;"α"
	NOP	;"β"

	XLINK	;"∧"
	NOP	;"¬"
	NOP	;"ε"
	NOP	;"π"

	NOP	;"λ"
	NOP	;tab
	NOP	;lf
	NOP	;vt

	NOP	;ff
	NOP	;cr
	NOP	;"∞"
	NOP	;"∂"

	XLINK	;"⊂"
	XLINK	;"⊃"
	XLINK	;"∩"
	XLINK	;"∪"

	NOP	;"∀"
	NOP	;"∃"
	XLINK	;"⊗"
	XMOVIE	;"↔" RUN THRU THE IMAGES AS A MOVIE.

	NOP	;"_"
	XTDPY	;"→"
	NOP	;"~"
	NOP	;"≠"

	XLINK	;"≤"
	XLINK	;"≥"
	NOP	;"≡"
	XLINK	;"∨"

;  ---		COMMAND JUMP TABLE ASCII 40 TO 77.
A40:	XWINDO	;" "
	XLINK	;"!"
	NOP	;"""
	XCRLFS	;"#"

	NOP	;"$"
	NOP	;"%"
	NOP	;"&"
	NOP	;"'"

	XWINDO	;"("
	XWINDO	;")"
	XWINDO	;"*"
	XLINK	;"+"

	XLINK	;","
	XWINDO	;"-"
	XLINK	;"."
	XWINDO	;"/"

	NOP	;"0"
	NOP	;"1"
	NOP	;"2"
	NOP	;"3"

	NOP	;"4"
	NOP	;"5"
	NOP	;"6"
	NOP	;"7"

	NOP	;"8"
	NOP	;"9"
	XWINDO	;":"
	XWINDO	;";"

	XLINK	;"<"
	NOP	;"="
	XLINK	;">"
	XHELP	;"?"
;  ---		COMMAND JUMP TABLE ASCII 100 TO 137.

A100:	NOP		;"@"
	XATP1  		;"A" AUTOMATIC TURNTABLE PERCEPTION.
	NOP	        ;"B"
	XCUT  		;"C" MAKE THRESHOLD CUT.

	XFLAGS		;"D" DISABLE PROCESSES.
	XFLAGS		;"E" ENABLE PROCESSES.
	NOP	        ;"F"
	NOP		;"G"

	DPYHIS		;"H" HISTOGRAM, "αH" ,"βH" BI-MODAL CUT.
	XINPUT		;"I" INPUT.
	XXPAND		;"J" TWO CUTS AT 5% FROM ENDS.
	NOP		;"K"

	NOP	        ;"L"
	XMATCH		;"M" MATCH AND LINK IMAGES IN TIME.
	XNAME		;"N" NAME THE FILM.
	XOUTPUT		;"O" OUTPUT.

	PLOTO 		;"P" PLOT OUTPUT FILE.
	XCUTS 		;"Q" EQUI-SPACED CUTS.
	NOP	        ;"R"
	XSELECT		;"S" SELECT CAMERA, "αS" BCLIP, "βS" TCLIP.

	XTAKE		;"T" TAKE TELEVISON PICTURE. "αT" SIXBIT.
	XTABLE↑		;"U" ENTER TURN TABLE SERVO SUB COMMAND.
	XVCUT		;"V"
	AWIDTH		;"W" SET ARC WIDTH TABLE.

	TVXGP		;"X"	XEROX OUTPUT.
	XTABLE↑		;"Y"	TURN TABLE.
	XRESET		;"Z"	ZERO DATA BUFFERS.
	NOP		;"[" OR "{"

	XWINDO		;"\" OR "|"
	NOP		;"]" OR ALT
	NOP		;"↑" OR "}"
	XTDPY		;"←" OR RUB

NOP:	OUTCHR[9]↔OUTCHR CHR↔OUTSTR[ASCIZ/ NO OPERATION./]
	POP0J
XWINDO:		;WINDOW SCROLLING COMMANDS.
BEGIN XWINDO;-----------------------------------------------------
	LAC CHR
	CAIN 0," "↔GO L2
	CAIN 0,":"↔GO[LAC SX↔FAD DEL↔DAC SX↔GO L2]
	CAIN 0,";"↔GO[LAC SX↔FSB DEL↔DAC SX↔GO L2]
	CAIN 0,")"↔GO[LAC SY↔FAD DEL↔DAC SY↔GO L2]
	CAIN 0,"("↔GO[LAC SY↔FSB DEL↔DAC SY↔GO L2]
	CAIN 0,"/"↔GO[LAC DEL↔FSC -1↔DAC DEL↔GO L2]
	CAIN 0,"\"↔GO[LAC DEL↔FSC 1↔DAC DEL↔GO L2]
	CAIN 0,"*"↔GO[LAC MAG↔FMP[1.5]↔DAC MAG↔GO L2]
	CAIN 0,"-"↔GO[LAC MAG↔FDV[1.5]↔DAC MAG↔GO L2]
L2:	CALL(CROP)↔CALL(DPYIMG)↔AOS(P)↔POP0J
BEND XWINDO; BGB 19 APRIL 1973 -----------------------------------

XVCUT:	SKIPE CTRL↔GO XVCUT2
	OUTSTR[ASCIZ/	VCUT = /]
	CALL(REALI)
	FIXX
	DAC VCUT
	CALL(DPYIMG)
	POP0J

XVCUT2:	OUTSTR[ASCIZ/	POLY SIDES = /]
	CALL(REALI)
	FIXX
	DAC PCUT
	CALL(DPYIMG)
	POP0J
XLINK:		;LINK FOLLOWING COMMANDS.

COMMENT/ Replace the QBLK with one of its own links. Empty links
and demands for positions that are not links are ignored by means
of checking the node's relocation bits./

BEGIN XLINK;------------------------------------------------------
	LAC CHR
	CAIN"!"↔GO[DZM QBLK↔GO L]
	CAIE"⊗"↔CAIN"+"↔GO[LAC FILM↔DAC QBLK↔GO L]
	SKIPN 2,QBLK↔POP0J		;GET THE QBLK NODE.
	RELOC 3,2		;RELOCATION BITS.
	CAIN","↔LACI 2000	;WORD0.
	CAIN"."↔LACI 1000
	CAIN"<"↔LACI 2001	;WORD1.
	CAIN">"↔LACI 1001
	CAIN"∪"↔LACI 2003	;WORD3.
	CAIN"∩"↔LACI 1003
	CAIN"≤"↔LACI 2004	;WORD4.
	CAIN"≥"↔LACI 1004
	CAIN"⊂"↔LACI 2005	;WORD5.
	CAIN"⊃"↔LACI 1005
	CAIN"∨"↔LACI 2006	;WORD6.
	CAIN"∧"↔LACI 1006
	TRNN 3000↔POP0J		;NO HIT ON COMMAND CHR.
	DAC 1↔ANDI 1,7↔LSH -9
	LDB 3,[POINT 3,3,20↔POINT 3,3,23↔0↔POINT 3,3,26
	       POINT 3,3,29↔POINT 3,3,32↔POINT 3,3,35](1)
	TDNN 3,0↔POP0J		;AIN'T NO LINK THERE.
	ADD 1,2↔LAC 3,(1)
	TRNN 0,1↔MOVSS 3↔CDR 3
	SKIPE↔DAC QBLK
L:	LAC 1,QBLK↔TEST 1,IBIT↔GO .+3
	DAC 1,QIMAGE↔CALL(DPYIMG)
	CALL(DPYBLK)
	AOS(P)↔POP0J
BEND XLINK; BGB 19 APRIL 1973 ------------------------------------

XCRLFS:	LACI 20↔CRLF↔SOJG .-1↔POP0J
;XRESET "Z" COMMAND.	 NEXIMG.
SUBR(XRESET)------------------------------------------------------
BEGIN XRESET
	EXTERN AVAIL,BLKCNT,FILM,OLD44
	SKIPE META↔GO[SETZB 0,1↔UPGIOT 16,↔POP0J]
	SKIPE CTRL↔GO L
	DZM QBLK↔DZM QIMAGE
	LAC OLD44↔CORE↔JFCL↔DZM OLD44
	DZM AVAIL↔DZM BLKCNT↔DZM FILM
	CALL(MORCOR)
L:	DZM SX↔DZM SY
	LAC[32.0]↔DAC DEL
	LAC[3.4]↔DAC MAG
	CALL(CROP)
	CALL(DPYIMG)
	POP0J
BEND XRESET; BGB 31 DECEMBER 1972 --------------------------------

SUBR(XMOVIE)------------------------------------------------------
BEGIN XMOVIE;NEXT IMAGE - BGB - 11 DEC 72.
	SKIPN 1,QIMAGE↔POP0J
	CCW 2,1↔SKIPE CTRL↔CW 2,1
	DAC 2,QIMAGE
	CALL(DPYIMG)
	SKIPE META↔GO[INCHRS↔GO XMOVIE↔POP0J]
	POP0J
BEND;12/11/72-----------------------------------------------------

SUBR(XMATCH)		"M" - MATCH AND LINK IMAGES IN TIME.
BEGIN XMATCH;-----------------------------------------------------
	EXTERN CMCNII
	LAC CTRL↔AND META↔JUMPN L2
	LAC 2,FILM↔SON 2,2	;FIRST IMAGE TAKEN.
	CW 2,2			;LATEST IMAGE TAKEN.
	LAC 1,2↔CW 1,1		;PENULT IMAGE TAKEN.
	CALL(CMCNII,1,2)	;BEFORE TO AFTER.
	POP0J
L2:	LAC 1,FILM↔SON 1,1
	DAC 1,I0↔DAC 1,I1
L3:	LAC 1,I1↔CCW 2,1		;EARLIER TO LATER.
	CALL(CMCNII,1,2)
	LAC 1,I1↔CCW 1,1↔DAC 1,I1	;ADVANCE ALONG FILM.
	CAME 1,I0↔GO L3↔POP0J
DECLARE{I0,I1}
BEND XMATCH; BGB 16 APRIL 1973 -----------------------------------

XTDPY:;		"←" "→" DISPLAY TIMED LINKED POLYGON OF QBLK.
	EXTERN TIMDPY
	SKIPN 1,QBLK↔POP0J
	TEST 1,PBIT↔POP0J
	PUSH P,QBLK
	LAC CHR↔CAIN "←"↔GO[PUSHJ P,TIMDPY+1↔POP0J]
	PUSHJ P,TIMDPY↔POP0J
SUBR(XNAME)		"N" - NAME THE FILM.
BEGIN XNAME;------------------------------------------------------
	EXTERN STADPY,FNAME,FNAME6
	OUTSTR[ASCIZ/	FILM NAME = /]
	LAC 1,[POINT 7,FNAME,-1]	;ASCII.
	LAC 2,[POINT 6,FNAME6,-1]	;SIXBIT.
	LACI 3,6
L:	INCHWL
	CAIN 15↔GO[INCHWL↔GO EOL]
	CAIL"a"↔SUBI 40
	IDPB 1
	SUBI 40
	IDPB 2
	SOJG 3,L
EOL:	SETZ↔SKIPE 3↔GO[IDPB 1↔IDPB 2↔SOJA 3,.-1]
	CALL(STADPY)
	AOS(P)↔AOS(P)↔POP0J
BEND XNAME; BGB 17 APRIL 1973 ------------------------------------
XFLAGS:
BEGIN XFLAGS;-----------------------------------------------------
	EXTERN ENEST,ECONT,ESMOO,ECOMP

	LAC CHR↔CAIN"E"↔GO L9
	SETZM ENEST↔SETZM ECONT↔SETZM ESMOO↔SETZM ECOMP↔POP0J
L9:	SKIPE MTCT↔EXIT
	SETOM ENEST↔SETOM ECONT↔SETOM ESMOO↔SETOM ECOMP↔POP0J
BEND  XFLAGS; BGB 20 APRIL 1973 ----------------------------------

XINPUT:;			"I" - INPUT COMMANDS.
	EXTERN CREIN,TVDSKI
	SKIPN CTRL↔GO[DZM FLGHIS
	CALL(TVDSKI,[-1])↔GO SKPOPJ]
	CALL(CREIN)
	LAC 1,FILM↔SON 1,1↔DAC 1,QIMAGE
	CALL(DPYIMG)
SKPOPJ:	AOS(P)↔AOS(P)↔POP0J

XOUTPUT:;		"O" - OUTPUT COMMANDS.
	SKIPN CTRL↔GO[
	CALL(TVDSKO↑,[-1])↔GO SKPOPJ]
	CALL(CREOUT↑)↔GO SKPOPJ

SUBR(XCUT).		;MAKE CUTS COMMAND "C".
BEGIN XCUT;-------------------------------------------------------

;DISTINGUISH CUTTING A FILM OF FILES & CUTTING SINGLE IMAGE.
	DZM FFLAG#↔LAC 1,QBLK
	CAMN 1,FILM↔SETOM FFLAG#
	DZM IMGNUM#	;IMAGE NUMBER.

;DECODE THE ARGUMENTS.
	DZM QQ2↔DZM QQ3
L1:	SETZ 1,↔INCHWL
	CAIN 15↔GO[CALL(L4)↔GO L2]
	CAIL 0,"0"↔CAILE 0,"7"↔GO[CALL(L4)↔GO L1]
	IMULI 1,=8↔ANDI 17↔ADD 1,0↔GO L1+1

L2:	INCHWL 			;PICK UP THE LINE FEED.
	SKIPN FFLAG↔GO L3	;SKIP WHEN FILMING.
	CALL(TVDSKI,IMGNUM)
	AOS IMGNUM
	SKIPN 1↔POP0J

L3:	SKIPE META↔GO L5
	LAC QQ2↔IOR QQ3		;MAKE SURE THERE ARE SOME CUTS.
	SKIPN↔POP0J
	CALL(MKCON,QQ2,QQ3)	;CONTOUR THE VIDEO IMAGE.
	CALL(DPYIMG)		;DISPLAY IMAGE.
	SKIPN FFLAG↔POP0J	;POTENTIAL EXIT.
	GO L2+1

;TURN ON SPECIFIED BIT POSITION.
L4:	SKIPN 1↔POP0J
	CAIL 1,=64↔POP0J
	MOVNS 1↔SETZ 3,
	SLACI 2,1B18↔LSHC 2,(1)
	IORM 2,QQ2↔IORM 3,QQ3
	POP0J

;RAW CONTOURS TO XGP.
L5:	SKIPN CTRL↔GO L3+2
	CALL(VICXGP,QQ2,QQ3)↔EXTERN VICXGP
	POP0J
BEND;1/17/73------------------------------------------------------
	DECLARE{QQ2,QQ3}	;CONTOUR CUT INDICATOR BITS.
SUBR(XATP1).	;AUTOMATIC TURN TABLE PERCEPTION "A".
BEGIN ATP1;----------------------------------------------------------
	SKIPE META↔GO XATP2		;META FOR CALIBRATION PASS.
;GET NECESSARY ARGUMENTS.
	DZM IMGNUM#				;IMAGE NUMBER.
	OUTSTR[ASCIZ/	NUMBER OF IMAGES DESIRED = /]
	CALL(REALI↑)↔FIXX↔DAC 1↔MOVM↔AOS↔DAC IMGCNT#

;RESTART AT IMAGE NUMBER <N> WHEN NECESSARY.
	JUMPL 1,[
	OUTSTR[ASCIZ/	FIRST IMAGE'S NUMERAL = /]
	CALL(REALI↑)↔FIXX↔DACM IMGNUM
	LAC 1,IMGCNT↔SUB 1,0↔DAC 1,IMGCNT↔GO .+1]

	CALL(XNAME)↔CRLF			;FILM'S NAME.
	LAC CTRL↔DAC SAVE1#
	DZM CTRL↔DZM META

;PICTURE TAKING LOOP.
L1:	OUTCHR["	"]			;PRINT IMAGE NUMERAL.
	LAC 0,IMGNUM↔IDIVI 0,=10
	ADDI 0,60↔ADDI 1,60
	CAIN 0,"0"↔LACI 0," "
	OUTCHR 0↔OUTCHR 1

	LAC SAVE1↔DAC CTRL
	OUTSTR[ASCIZ/ T/]↔CALL(XTAKE)		;TAKE A PICTURE.
	DZM CTRL

	CALL(TVDSKO,IMGNUM)↔AOS IMGNUM		;OUTPUT THE PICTURE.
	CALL(STADPY)				;STATUS DISPLAY.
	SOSG IMGCNT↔GO L2			;TEST FOR DONE.
	LACI "Y"↔CALL(XTABLE↑)			;TURN THE TABLE.
	GO L1

L2:	OUTSTR[ASCIZ/END OF AUTOMATIC TURN TABLE FILMING.
/]↔	POP0J
BEND ATP1;BGB 25 JUNE 1973 __________________________________________
SUBR(XATP2).	;AUTOMATIC TURN TABLE PERCEPTION "εA".
BEGIN ATP2;----------------------------------------------------------
	DZM META
;GET NECESSARY ARGUMENTS.
	DZM IMGNUM#				;IMAGE NUMBER.
	OUTSTR[ASCIZ/	NUMBER OF IMAGES DESIRED = /]
	CALL(REALI↑)↔FIXX↔DAC 1↔MOVM↔AOS↔DAC IMGCNT#

;RESTART AT IMAGE NUMBER <N> WHEN NECESSARY.
	JUMPL 1,[
	OUTSTR[ASCIZ/	FIRST IMAGE'S NUMERAL = /]
	CALL(REALI↑)↔FIXX↔DACM IMGNUM
	LAC 1,IMGCNT↔SUB 1,0↔DAC 1,IMGCNT↔GO .+1]
	LAC CTRL↔DAC SAVE1#
	DZM CTRL↔DZM META

;PICTURE TAKING LOOP.
L1:	OUTCHR["	"]			;PRINT IMAGE NUMERAL.
	LAC 0,IMGNUM↔IDIVI 0,=10
	ADDI 0,60↔ADDI 1,60
	CAIN 0,"0"↔LACI 0," "
	OUTCHR 0↔OUTCHR 1

	LAC SAVE1↔DAC CTRL
	OUTSTR[ASCIZ/ T/]↔CALL(XTAKE)		;TAKE A PICTURE.
	DZM CTRL↔CRLF

	CALL(MKCON,QQ2,QQ3)↔AOS IMGNUM		;CONTOUR THE IMAGE.
	CALL(DPYIMG)				;STATUS DISPLAY.
	CALL(XMATCH)
	SOSG IMGCNT↔GO L2			;TEST FOR DONE.
	LACI "Y"↔CALL(XTABLE↑)			;TURN THE TABLE.
	GO L1

L2:	OUTSTR[ASCIZ/END OF AUTOMATIC TURN TABLE FILMING.
/]↔	POP0J
BEND ATP2;BGB 25 JUNE 1973 __________________________________________
SUBR(XCUTS).		;MAKE CUTS COMMAND "Q".
BEGIN XCUTS;------------------------------------------------------
	SETZ 1,
	SKIPE CTRL↔LACI 1,1
	SKIPE META↔ADDI 1,2
	CALL(MKCON,{Q1(1)},{Q2(1)})
	CALL(DPYIMG)
	POP0J

;THREE, SEVEN, EIGHT OR FIFTEEN CUTS  -  EQUALLY SPACED.
Q1:	    1B16     +1B32
	1B8+1B16+1B24+1B32  ↔  1B4+1B12+1B20+1B28
	1B8+1B16+1B24+1B32  +  1B4+1B12+1B20+1B28
Q2:	    1B12
	1B4+1B12+1B20 ↔ 1B0+1B8+1B16+1B24
	1B4+1B12+1B20 + 1B0+1B8+1B16+1B24

BEND XCUTS; BGB 9 DECEMBER 1972 -----------------------------------

SUBR(XTAKE).		"T" TAKE TELEVISION PICTURE.
BEGIN XTAKE
	DOM FLGHIS			;HISTOGRAM WILL BE ACCUMULATED.
	LAC CTRL↔AND META↔JUMPN L1	;META-CTRL TAKE A MOVIE.
	SKIPE META↔GO[
	CALL(TVINFB↑)↔POP0J]		;TAKE VIDEO FROM FAST BANDS.

	SKIPE CTRL↔GO[
	CALL(TVIN6↑)↔POP0J]		;CTRL TAKE 6-BIT VIDEO.
	CALL(TVIN4↑)↔POP0J		;TAKE 4-BIT VIDEO

L1:	OUTSTR[ASCIZ/	TAKE FILM/]↔CRLF
	CALL(TVFILM↑)↔POP0J

BEND XTAKE;(BGB)14-DEC-72
SUBR(XSELECT).		"S" SELECT CAMERA.
BEGIN XSELECT;----------------------------------------------------
	EXTERN TVCLIP
	LAC CTRL↔AND META↔SKIPE↔GO L4
	SKIPE CTRL↔GO L2↔SKIPE META↔GO L3

;SELECT CAMERA.
L1:	LDB[POINT 2,TVCLIP,26]↔IORI 60
	OUTSTR[ASCIZ/	CHANGE CAMERA /]
	OUTCHR↔OUTSTR[ASCIZ/ TO /]
	INCHRW↔CAIE 15↔DPB[POINT 2,TVCLIP,26]↔POP0J

;SELECT BOTTOM CLIP LEVEL.
L2:	LDB[POINT 3,TVCLIP,20]↔IORI 60
	OUTSTR[ASCIZ/	CHANGE BCLIP /]
	OUTCHR↔OUTSTR[ASCIZ/ TO /]
	INCHRW↔CAIE 15↔DPB[POINT 3,TVCLIP,20]↔POP0J

;SELECT TOP CLIP LEVEL.
L3:	LDB[POINT 3,TVCLIP,23]↔IORI 60
	OUTSTR[ASCIZ/	CHANGE TCLIP /]
	OUTCHR↔OUTSTR[ASCIZ/ TO /]
	INCHRW↔CAIE 15↔DPB[POINT 3,TVCLIP,23]↔POP0J

;SHRINK NODE SPACE.
L4:	CALL(SHRINK)↔EXTERN SHRINK
	POP0J

BEND XSELECT; BGB 6 DECEMBER 1972 --------------------------------
SUBR(XXPAND);		HISTOGRAM CUT HIGH AND CUT LOW.
BEGIN XXPAND;-----------------------------------------------------
	EXTERN HISTO,HISTOG
	ACCUMULATORS{Q1,Q2,HI,LO}
	SKIPN CTRL↔GO L1
	LACI 1,77↔SETZ↔DAC 0,TVMAP(1)↔AOS↔SOJGE 1,.-2↔GO L3
L1:	CALL(HISTOG)
	LACI HI,77↔DZM LO↔SETZB Q1,Q2
	LACI 6↔IMULI =62208↔IDIVI =100↔DAC 1	;6% RULE.

;COME IN FROM THE EXTREMES 6 PER CENT.
	SETZ↔ADD HISTO(LO)↔CAMGE 1↔AOJA LO,.-2
	SETZ↔ADD HISTO(HI)↔CAMGE 1↔SOJA HI,.-2
L2:	CAML LO,HI↔POP0J

;LOOK FOR LOCAL MINIMUM.
;	LAC HISTO(LO)↔CAML HISTO+1(LO)↔AOJA LO,L2
;	LAC HISTO(LO)↔CAML HISTO-1(LO)↔AOJA LO,L2
;	LAC HISTO(HI)↔CAML HISTO+1(HI)↔SOJA HI,L2
;	LAC HISTO(HI)↔CAML HISTO-1(HI)↔SOJA HI,L2

;MAKE THE TV MAP.
	SETZB 0,1
	DAC 0,TVMAP(1)↔CAMG 1,LO↔AOJA 1,.-2	;00 TO LO → 00.
	LACI 77↔LACI 1,77
	DAC 0,TVMAP(1)↔CAML 1,HI↔SOJA 1,.-2	;77 TO HI → 77.
	SLACI 2,77↔LAC 1,HI↔SUB 1,LO↔IDIV 2,1	;DELTA INTENSITY.
	SETZ↔LAC 1,LO↔AOS 1
	HLRZM 0,TVMAP(1)↔ADD 0,2
	CAMGE 1,HI↔AOJA 1,.-3
L3:	CALL(REMAP)
	POP0J
BEND XXPAND;------------------------------------------------------
SUBR(REMAP);		RE MAP TVBUF.
BEGIN REMAP;------------------------------------------------------
	EXTERN TVBUF,FLGHIS
	DZM FLGHIS
	LAC[XWD L,2]↔BLT 8↔GO 2
L:	ILDB 1,7	;2
	LAC 1,TVMAP(1)	;3 REPLACE BYTE ACCORDING TO TABLE TVMAP.
	DPB 1,7
	SOJG 8,2	;5
	POP0J		;6
	POINT 6,TVBUF	;7 INITIAL TV BUFFER POINTER.
	=62208		;8 NUMBER OF PIXELS.
BEND REMAP; BGB 6 MAY 1973 ----------------------------------------

INTERN TVMAP
TVMAP:	BLOCK 100

;AWIDTH - SELECT ARC WIDTH.
SUBR(AWIDTH)------------------------------------------------------
BEGIN AWIDTH
	EXTERN REALI
	ACCUMULATORS{DEL,XLO,XHI,X1,X2}
	TDCA X2,X2↔INCHWL
L1:	OUTSTR[ASCIZ/	#/]

	INCHRW↔CAIN 15↔GO L1-1
	CAIL"0"↔CAILE"7"↔GO L4
	ANDI 7↔LSH 3↔DAC 1

	INCHRW↔CAIN 15↔GO L1-1
	CAIL"0"↔CAILE"7"↔GO L4
	ANDI 7↔ADD 1,0↔EXCH 1,X2↔DAC 1,X1

L2:	CALL(TYPOUT)↔CALL(REALI)
	JUMPLE .+3↔CAMGE[100.0]↔CALL(ALTER)
	CAIE 1,175↔GO L1↔CRLF↔SOJA X2,L3
L3:	CAILE X2,77↔LACI X2,77
   	CAIGE X2,00↔LACI X2,00
	LAC[ASCIZ/	#00/]
	DPB X2,[POINT 3,0,27]↔ROT X2,-3
	DPB X2,[POINT 3,0,20]↔ROT X2, 3
	OUTSTR↔GO L2
L4:	CRLF↔POP0J

TYPOUT:	LAC ARCWID(X2)↔FMPR[100.0]↔FIXX
	IDIVI 0,=1000
	SKIPE↔IORI"0"↔IORI" "   ↔DPB 0,[POINT 7,STR,13]
	IDIVI 1,=100 ↔IORI 1,"0"↔DPB 1,[POINT 7,STR,20]
	IDIVI 2,=10  ↔IORI 2,"0"↔DPB 2,[POINT 7,STR,34]
	              IORI 3,"0"↔DPB 3,[POINT 7,STR+1,6]
	OUTSTR STR↔POP0J
STR:	ASCIZ/	99.99	/

ALTER:	DAC ARCWID(X2)
	LAC XLO,X1↔LAC XHI,X2↔CAMLE XLO,XHI↔EXCH XLO,XHI
	LAC XHI↔SUB XLO↔FLOAT
	LAC DEL,ARCWID(XHI)↔FSBR DEL,ARCWID(XLO)↔FDVR DEL,0
	LAC ARCWID(XLO)↔AOS XLO
L5:	CAML XLO,XHI↔POP0J
	FADR DEL↔DAC ARCWID(XLO)↔AOJA XLO,L5

BEND AWIDTH;BGB 16 DECEMBER 1972 ---------------------------------
XHELP:	CALL(TVHELP,[[SIXBIT/CRE/↔SIXBIT/HLP/↔0↔SIXBIT/GEM HE/]])
	POP0J
SUBR(TVHELP)FILLOC
BEGIN TVHELP
	EXTERNAL DPYSET,DPYOUT,DPYBIG,DPYBRT,AIVECT,RIVECT,DTYO,DPYBUF
	SETZM INHDR
	INIT 17,↔SIXBIT/DSK/↔INHDR
	GO [FATAL(CAN'T INIT DSK)]
	MOVEI 1,2↔HRL 1,ARG1↔BLT 1,5
	LOOKUP 17,2
	GO [ OUTSTR[ASCIZ/HELP FILE NOT FOUND.
/]↔	     POP1J ]
	PUSH P,121
	PUSH P,44
	MOVE 1,44
	MOVEM 1,121
LOOP:	USETI 17,1
	SETSTS 17,0
	LACI 0,2
	MOVEM 0,PAGNUM#
	SOJLE 0,FOUND
PGLOOP:	CALL(GETCHR)
	GO [ OUTSTR[ASCIZ/PAGE NOT FOUND.
/]↔	     GO RET]
	CAIE 1,14
	JRST PGLOOP
	JRST PGLOOP-1
FOUND:	CALL(DPYSET,DPYBUF)
	CALL(AIVECT,[0],[=440])
	CALL(DPYBIG,[1])
	CALL(DPYBRT,[1])
	SETZM LPOS#
CHLOOP:	CALL(GETCHR)↔GO FIN
	CAIN 1,14↔GO FIN
	CAIN 1,11↔GO [ CALL(DTYO,[40])
	     AOS 1,LPOS
	     TRNE 1,7
	     GO $.-4
	     GO CHLOOP ]
	CALL(DTYO,1)
	AOS LPOS
	MOVE 1,1(P)
	CAIE 1,15
	GO CHLOOP
	SETZM LPOS
	CALL(RIVECT,[1000],[0])
	GO CHLOOP
FIN:	CALL(DPYOUT,[16])
	OUTSTR[ASCIZ/	TYPE <META>Z TO MAKE HELP GO AWAY./]
RET:	RELEASE 17,
	POP P,121
	MOVE 1,121
	CORE 1,↔GO [ FATAL(CAN'T SHRINK CORE) ]
	POP P,121
	POP1J

GETCHR:
	SOSG INHDR+2
	IN 17,↔GO[ILDB 1,INHDR+1↔AOS(P)↔POP0J ]
	POP0J
INHDR:	BLOCK 3
BEND TVHELP
IFE SAIL{END SA}
IFN SAIL{END}